﻿namespace BuildARoute
{
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using BuildARoute.Views;
    using System.Windows.Data;
    using System.Data.Services.Client;
    using BuildARoute.BARDataService;
    using System;

    /// <summary>
    /// <see cref="UserControl"/> class providing the main UI for the application.
    /// </summary>
    public partial class MainPage : UserControl
    {
        DataServiceCollection<Language> languageCollection;
        CollectionViewSource languageCollectionViewSource;
        TourGuideSolutionDataEntities datacontext;
        /// <summary>
        /// Creates a new <see cref="MainPage"/> instance.
        /// </summary>
        public MainPage()
        {
            InitializeComponent();

            datacontext = new TourGuideSolutionDataEntities(new Uri(App.Current.SvcPath));

            languageCollectionViewSource = App.Current.Resources["languageCollectionViewSource"] as CollectionViewSource;
            languageCollection = new DataServiceCollection<Language>();
            languageCollection.LoadCompleted += new EventHandler<LoadCompletedEventArgs>(languageCollection_LoadCompleted);
            languageCollection.LoadAsync(datacontext.Languages);
        }


        void languageCollection_LoadCompleted(object sender, LoadCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                //Load all pages before binding
                if (languageCollection.Continuation != null)
                {
                    languageCollection.LoadNextPartialSetAsync();
                }
                else
                {
                    //Bind
                    languageCollectionViewSource.Source = languageCollection;
                }
            }
            else
            {
                MessageBox.Show(string.Format("Error: {0} while loading languages.", e.Error.Message));
            }
        }
        /// <summary>
        /// After the Frame navigates, ensure the <see cref="HyperlinkButton"/> representing the current page is selected
        /// </summary>
        private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
        {
            foreach (UIElement child in LinksStackPanel.Children)
            {
                HyperlinkButton hb = child as HyperlinkButton;
                if (hb != null && hb.NavigateUri != null)
                {
                    if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))
                    {
                        VisualStateManager.GoToState(hb, "ActiveLink", true);
                    }
                    else
                    {
                        VisualStateManager.GoToState(hb, "InactiveLink", true);
                    }
                }
            }
        }

        /// <summary>
        /// If an error occurs during navigation, show an error window
        /// </summary>
        private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            e.Handled = true;
            ErrorWindow.CreateNew(e.Exception);
        }

 
    }
}